﻿using Autofac.Extensions.DependencyInjection;
using Autofac;
using System.Reflection;

namespace XKJ.OAWeb.Api.Config
{
    public static class AutofacConfig
    {
       public static void UseAutofac (this IHostBuilder Host)
        {
            //对autofac进行一个配置（著名第三方IOC容器，可以帮助实现批量注入）
            Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
            //配置IOC容器
            Host.ConfigureContainer<ContainerBuilder>((x, y) =>
            {
                //仓储层/基础设施层（RegisterAssemblyOpenGenericTypes）批量注册注册Week1.Infrastructrue程序集中的所有泛型类
                y.RegisterAssemblyOpenGenericTypes(Assembly.Load("XKJ.OAWeb.Infrastructrue"))
                .AsImplementedInterfaces()
                .InstancePerLifetimeScope();//注册为域模式

                //服务层/应用层（RegisterAssemblyTypes）
                y.RegisterAssemblyTypes(Assembly.Load("XKJ.OAWeb.Application"))
                .Where(x => x.Name.EndsWith("Service"))//加条件，只注册以Service结尾的类型
                .AsImplementedInterfaces()
                .InstancePerLifetimeScope();//注册为域模式
            });
        }
    }
}
